package com.example.demo.config;

import com.google.common.base.Predicate;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Component
// 启动swagger
@EnableSwagger2
public class SwaggerStarter {

    //  通过Docket对象 去生产启动
    @Bean
    public Docket docket(){
        Contact contact = new Contact("swagger", "http://www.baidu.com", "123@qq.com");
        // apiInfo
        ApiInfo apiInfo = new ApiInfo(
                "接口文档",
                "云教育管理系统接口文档",
                "1.2",
                "http://www.baidu.com"
                , contact, "协议", "http://www.baidu.com",
                new ArrayList<>());

        // 分组策略：
        //  1.安装请求方式进行分组  GET  一组
        Predicate<RequestHandler> gets = RequestHandlerSelectors.withMethodAnnotation(GetMapping.class);


        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                ;
    }


//    @Bean
//    public Docket docket2(){
//        Contact contact = new Contact("swagger", "http://www.baidu.com", "123@qq.com");
//        // apiInfo
//        ApiInfo apiInfo = new ApiInfo(
//                "接口文档",
//                "云教育管理系统接口文档",
//                "1.2",
//                "http://www.baidu.com"
//                , contact, "协议", "http://www.baidu.com",
//                new ArrayList<>());
//
//        // 分组策略：
//        //  1.安装请求方式进行分组  POST  一组
//        Predicate<RequestHandler> gets = RequestHandlerSelectors.withMethodAnnotation(PostMapping.class);
//
//
//        return new Docket(DocumentationType.SWAGGER_2)
//                .apiInfo(apiInfo)
//                .groupName("post请求")
//                .select()
//                .apis(gets)
//                .build()
//                ;
//    }
//
//
//    @Bean
//    public Docket docket3(){
//        Contact contact = new Contact("swagger", "http://www.baidu.com", "123@qq.com");
//        // apiInfo
//        ApiInfo apiInfo = new ApiInfo(
//                "接口文档",
//                "云教育管理系统接口文档",
//                "1.2",
//                "http://www.baidu.com"
//                , contact, "协议", "http://www.baidu.com",
//                new ArrayList<>());
//
//        // 分组策略：
//        //  1.使用类朱姐进行分组
//        Predicate<RequestHandler> gets = RequestHandlerSelectors.withClassAnnotation(RestController.class);
////        RequestHandlerSelectors.basePackage("com.example.front")
//
//        return new Docket(DocumentationType.SWAGGER_2)
//                .apiInfo(apiInfo)
//                .groupName("所有api")
//                .select()
//                .apis(gets)
//                .build()
//                ;
//    }
//
//    @Bean
//    public Docket docket4(){
//        Contact contact = new Contact("swagger", "http://www.baidu.com", "123@qq.com");
//        // apiInfo
//        ApiInfo apiInfo = new ApiInfo(
//                "接口文档",
//                "云教育管理系统接口文档",
//                "1.2",
//                "http://www.baidu.com"
//                , contact, "协议", "http://www.baidu.com",
//                new ArrayList<>());
//
//        // 分组策略：
//        //  1.按照请求路径进行分组
//        // /admin/user/list  /admin/level/list
//        // /api/user/detail
//        Predicate<String> user = PathSelectors.ant("/user/*");
//
//        return new Docket(DocumentationType.SWAGGER_2)
//                .apiInfo(apiInfo)
//                .groupName("用户相关")
//                .select()
//                .paths(user)
//                .build()
//                ;
//    }


}
